The invention relates in general to secure electronic communication and in particular to encryption systems and methods for providing privacy in electronic communication.
When an electronic message is sent via the Internet, the message generally travels through a number of gateways, routers, and other intermediaries between the sender and the recipient. While the message is in transit, third parties may have access to the message, so that privacy of the communication cannot be presumed. For that reason, parties using the Internet to transmit sensitive data (e.g., credit card information or business transaction information) usually desire to send encrypted messages that can be decrypted only by the intended recipient.
Communication of encrypted messages generally requires establishing a “shared secret” known to both the sender and recipient but not known to any third party. The shared secret typically acts as a key that can be used to encrypt and decrypt messages. Various techniques for establishing a shared secret are known. For instance, in secure socket layer (SSL) systems frequently used for secure World Wide Web connections between a client (browser) and server, the client and server establish a shared secret by having each entity apply the same algorithm to various data known to both (and unknown to third parties), without transmitting the secret across the Internet.
Despite initial appearances to the contrary, public key encryption also involves shared secrets. In a public key encryption system, each sender and each recipient has a public key and a private key, which typically are a pair of large numbers (e.g., 1024 or 2048 bits) mathematically related such that messages encrypted using the public key with an appropriate asymmetric encryption algorithm may only be decrypted using the corresponding private key, and vice versa. That is, if the sender encrypts a message using the recipient's public key, the recipient can then use its own private key to decrypt the message. If the recipient keeps its private key a secret from everyone, then third parties will not be able to decrypt the message. In practice, however, complete messages are usually not encrypted using the recipient's public key for a variety of reasons. For instance, public key encryption algorithms are computationally expensive due to the size of the keys and the complexity of asymmetric encryption algorithms, making public key encryption a slow process.
To avoid such problems, public key encryption systems are usually implemented using “enveloping.” A message sender generates a random secret key for encrypting the message. The encryption algorithm used is symmetric, i.e., the same secret key may be used to decrypt the message. Because these secret keys are smaller than private or public keys and because a symmetric encryption algorithm is used, the computing power required is considerably less than for public key encryption. In order to share the secret key with the recipient, the sender encrypts the secret key using the recipient's public key. The encrypted message and the encrypted secret key are then sent together to the recipient as an “enveloped” message. Enveloping typically reduces the amount of data to be encrypted with the recipient's public key. Moreover, because each secret key is a random number, the risk that an eavesdropper will be able to deduce the secret key from patterns in the encrypted data is significantly reduced. Upon receipt of the message, the recipient uses its private key to decrypt the secret key, then uses the secret key to decrypt the message.
Existing enveloping systems, however, still incur significant computational overhead on both the sender and the recipient sides due to the use of public key cryptography. The sender must generate a secret key for each message and encrypt it with the recipient's public key, a time-consuming process. The recipient must then decrypt the secret key using his private key, which again takes time. This overhead limits the speed at which communication can take place.